/*
 * @Author: YuanSong 
 * @Date: 2021-12-02 14:20:25 
 * @Last Modified by: YuanSong
 * @Last Modified time: 2021-12-02 14:31:44
 */
//克隆方法clone、校验参数方法checkParams、返回统一方法autoFn

const async = require('async'); //引入async模块
const Constant = require('../constant/constant'); //引入常量模块

//定义一个对象
const exportObj = {
    clone,
    checkParams,
    autoFn,
};

module.exports = exportObj; //导出对象，方便其他方法调用
/**
 * 克隆方法，克隆一个对象
 * @param {*} obj 
 * @returns {any}
 */
function clone(obj){
    return JSON.parse(JSON.stringify(obj));
}
/**
 * 校验参数全局方法
 * @param {*} params 请求的参数集 
 * @param {*} checkArr 需要验证的参数
 * @param {*} cb 回调
 */
function checkParams (params,checkArr,cb){
    let flag = true;
    checkArr.forEach(v=>{
        if (!params[v]) {
            flag = false;
        }
    })
    if (flag){
        cb(null);
    } else {
        cb(Constant.LACK);
    }
}
/**
 * 返回统一方法，返回JSON格式数据
 * @param {*} tasks 当前controller执行tasks
 * @param {*} res 当前controller response
 * @param {*} resObj 当前controller 返回json对象
 */
function autoFn(tasks,res,resObj){
    async.auto(tasks,function (err){
        if (!!err){
            console.log(JSON.stringify(err));
            res.json({
                code:err.code || Constant.DEFAULT_ERROR.code,
                message:err.msg || JSON.stringify(err)
            });

        } else {
            res.json(resObj);
        }
    })
}